from collections import*
I=input
for _ in[0]*int(I()):
s=1,*I(),0;t,p=I(),Counter(I());i=1
for c in t:
if c==s[i]:i+=1
elif p[c]:p[c]-=1
else:i=0
print('YNEOS'[s[i]!=0::2])
#include <bits/stdc++.h>
using namespace std;
//... Gmail: [email protected]
//... Facebook: https://www.facebook.com/profile.php?id=100009621791250
//... Github: https://github.com/ahnafshahrear
typedef long long int i64;
typedef unsigned long long int ui64;
#define vt vector
#define pb push_back
#define Size(v) (int)(v.size())
#define Full(v) v.begin(), v.end()
#define Sort(v) sort(Full(v))
#define ReverseSort(v) sort(v.rbegin(), v.rend())
#define Reverse(v) reverse(Full(v))
#define LineBreak cout << "\n";
#define pi 3.1415926535897932384626
#define pf first
#define ps second
#define mp make_pair
#define LowerBound(v, x) lower_bound(Full(v), x) - v.begin()
// First element not less than x - zero based index
#define UpperBound(v, x) upper_bound(Full(v), x) - v.begin()
// First element greater than x - zero based index
#define Mod 1000000007;
#define Boundary(r, c, row, column) ((r >= 0 && r < row) && (c >= 0 && c < column))
//... Works with zero based index
#define Exit(msg) {cout << msg << "\n"; return;}
#define optimize() ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);
#define file() freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
template<typename T> //... cin >> vector
istream& operator>>(istream &istream, vector<T> &v) {for (auto &it : v) cin >> it; return istream;}
template<typename T> //... cout << vector
ostream& operator<<(ostream &ostream, const vector<T> &p) {for (auto &it : p) cout << it << " "; return ostream;}
template<typename T1, typename T2> //... cin >> pair
istream& operator>>(istream &istream, pair<T1, T2> &p) {return (istream >> p.first >> p.second);}
template<typename T1, typename T2> //... cout << pair
ostream& operator<<(ostream &ostream, const pair<T1, T2> &p) {return (ostream << p.first << " " << p.second);}
template<typename T>
void _debug(T a) {
cout << a << "]\n";
}
template<typename T, typename... Args>
void _debug(T a, Args... b) {
cout << a << ", ";
_debug(b...);
}
template<typename... Args>
void debug(Args... b) {cout << '['; _debug(b...);}
bool sortBySec(const pair<int,int> &a, const pair<int,int> &b)
{
return a.second < b.second;
}
int countDigit(int number)
{
return floor(log10(number) + 1);
}
bool isPalindrome(string s)
{
for (int i = 0; i < s.length() / 2; i++)
{
if (s[i] != s[s.length() - i - 1]) return false;
}
return true;
}
void subString(string s)
{
for (int i = 0; i < s.size(); i++)
{
for (int len = 1; len <= s.size() - i; len++)
{
cout << s.substr(i, len) << "\n";
}
}
}
// Solution starts here...
void solve()
{
string s, t, p;
cin >> s >> t >> p;
map<char, int> occ;
for (char x: p)
{
occ[x]++;
}
int in = 0;
for (char x: t)
{
if (x == s[in])
{
in++;
}
else if (occ[x])
{
occ[x]--;
}
else Exit("NO");
}
if (s.size() == in)
{
cout << "YES\n";
}
else cout << "NO\n";
}
int main()
{
optimize()
int testCase = 1;
if (true)
{
cin >> testCase;
}
for (int t = 1; t <= testCase; t++)
{
solve();
}
return 0;
}
516. Longest Palindromic Subsequence | 468. Validate IP Address |
450. Delete Node in a BST | 445. Add Two Numbers II |
442. Find All Duplicates in an Array | 437. Path Sum III |
436. Find Right Interval | 435. Non-overlapping Intervals |
406. Queue Reconstruction by Height | 380. Insert Delete GetRandom O(1) |
332. Reconstruct Itinerary | 368. Largest Divisible Subset |
377. Combination Sum IV | 322. Coin Change |
307. Range Sum Query - Mutable | 287. Find the Duplicate Number |
279. Perfect Squares | 275. H-Index II |
274. H-Index | 260. Single Number III |
240. Search a 2D Matrix II | 238. Product of Array Except Self |
229. Majority Element II | 222. Count Complete Tree Nodes |
215. Kth Largest Element in an Array | 198. House Robber |
153. Find Minimum in Rotated Sorted Array | 150. Evaluate Reverse Polish Notation |
144. Binary Tree Preorder Traversal | 137. Single Number II |